package cn.hp.service.admin.impl;

import cn.hp.pojo.TblSysUser;
import cn.hp.util.ResponseData;
import cn.hp.mapper.AdminMapper;
import cn.hp.service.admin.AdminService;
import cn.hutool.crypto.digest.MD5;
import org.apache.commons.lang3.RandomStringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class AdminServiceImpl implements AdminService {

    @Autowired
    private AdminMapper adminMapper ;

    @Override
    public ResponseData login(TblSysUser user) {
        // 使用管理员输入的账号、密码 进行加密校验( md5 非对称 不可逆 加密 )
        // 在数据库中保存 加密之后的密码 123456  加盐加密 salt
        // md5 国际通用的加密方式 commons-codes  hutool
        // 创建md5加密对象
        MD5 md5 = MD5.create();
        String md5Password = md5.digestHex(user.getPassword());
        // 查询出数据库中当前username下的烟 salt
        TblSysUser sysUser = adminMapper.findOneByUsername(user.getUsername());
        System.out.println("user:" + sysUser);
        // 验证是否存在当前用户，不存在用户名错误
        if (sysUser == null || sysUser.getSalt() == null ){
            return ResponseData.fail("输入的用户名有误");
        }
        // 再次加盐加密  创建加盐密码 和 取出比较时 方式一致即可
        String password = md5.digestHex(md5Password + sysUser.getSalt());
        // 加密方式一般都是通过字节进行加密
//        System.out.println(password); //    26f5bccdda2fedfdf0c0d1d7ad18ffe3
        // 使用忽略大小写比较
        if (password.equalsIgnoreCase(sysUser.getPassword())){
            return ResponseData.success();
        }
        return ResponseData.fail("密码输入错误");
    }

    @Override
    public ResponseData register(TblSysUser user) {

        // 1. 先判断 当前用户是否存在
        int count = adminMapper.selectCount(user.getUsername());
        if (count > 0 ){
            return ResponseData.fail("当前用户已被注册");
        }
        // 没有被注册才能继续执行
        MD5 md5 = MD5.create();
        String md5Password = md5.digestHex(user.getPassword());
        // 自己生成随机盐  6位随机数
        String salt = RandomStringUtils.randomAlphabetic(6);
        user.setSalt(salt);
        String password = md5.digestHex(md5Password + user.getSalt());
        user.setPassword(password);
        adminMapper.insert(user);
        return ResponseData.success();
    }
}
